package manager;

import java.io.*;
import java.util.*;
import main.*;  // 导入同级包中的商品类

public class ProductManager {
    private List<Product> products = new ArrayList<>();

    // 添加商品
    public void addProduct(Product p) {
        products.add(p);
    }

    // 显示所有商品信息
    public void displayProducts() {
        if (products.isEmpty()) {
            System.out.println("暂无商品信息。");
        } else {
            for (Product p : products) {
                System.out.println(p);
            }
        }
    }

    // 根据关键字搜索商品（使用String类方法）
    public void searchProduct(String keyword) {
        boolean found = false;
        for (Product p : products) {
            if (p.getName().toLowerCase().contains(keyword.toLowerCase())) {
                System.out.println("找到商品：" + p);
                found = true;
            }
        }
        if (!found) {
            System.out.println("未找到相关商品。");
        }
    }

    // 保存商品到二进制文件
    public void saveToFile(String filename) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
            oos.writeObject(products);
            System.out.println("商品数据已成功保存到二进制文件：" + filename);
        } catch (IOException e) {
            System.out.println("保存二进制文件时出错：" + e.getMessage());
        }
    }

    // 保存商品到明文TXT文件
    public void saveToTextFile(String filename) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
            for (Product p : products) {
                // 利用Product类重写的toString()方法获取完整商品信息
                writer.write(p.toString());
                // 每个商品信息单独占一行，便于阅读和解析
                writer.newLine();
            }
            System.out.println("商品数据已成功保存为明文TXT文件：" + filename);
        } catch (IOException e) {
            System.out.println("保存TXT文件时出错：" + e.getMessage());
        }
    }

    // 从二进制文件读取商品数据
    @SuppressWarnings("unchecked")
    public void loadFromFile(String filename) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
            products = (List<Product>) ois.readObject();
            System.out.println("从二进制文件读取成功，当前商品数量：" + products.size());
        } catch (FileNotFoundException e) {
            System.out.println("未找到文件：" + filename);
        } catch (IOException | ClassNotFoundException e) {
            System.out.println("读取二进制文件时出错：" + e.getMessage());
        }
    }

    // 主函数用于测试
    public static void main(String[] args) {
        ProductManager manager = new ProductManager();

        try {
            // 创建商品实例（电子产品和服装）
            Product p1 = new Electronics("E001", "笔记本电脑", 4999, "华为");
            Product p2 = new Clothing("C001", "外套", 399, "L");

            // 添加到商品管理器
            manager.addProduct(p1);
            manager.addProduct(p2);

            // 显示所有商品
            System.out.println("=== 所有商品信息 ===");
            manager.displayProducts();

            // 搜索商品
            System.out.println("\n=== 搜索 '电脑' 结果 ===");
            manager.searchProduct("电脑");

            // 保存到二进制文件
            manager.saveToFile("products.dat");

            // 保存到明文TXT文件
            manager.saveToTextFile("products.txt");

            // 从二进制文件加载并显示
            System.out.println("\n=== 从二进制文件加载后的商品信息 ===");
            manager.loadFromFile("products.dat");
            manager.displayProducts();

        } catch (InvalidPriceException e) {
            System.out.println("创建商品失败：" + e.getMessage());
        }
    }
}